home *** CD-ROM | disk | FTP | other *** search
/ TeX 1995 July / TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO / web / noweb / contrib / conrado / d2tex (.txt) < prev    next >
LaTeX Document  |  1995-02-24  |  3KB  |  111 lines

  1. #! /bin/sh
  2. KEYGEN=/tmp/d2tex$$
  3. trap "rm -f $KEYGEN; exit 1" 1 2 3 15
  4. cat > $KEYGEN <<END_OF_FILE
  5. COMMENT#1
  6. ASSERT#1
  7. PROGRAM
  8. ENDPROGRAM
  9. ENDUSES
  10. MODULE
  11. ENDMODULE
  12. SPECIFICATION
  13. ENDSPECIFICATION
  14. IMPLEMENTATION
  15. ENDIMPLEMENTATION
  16. IMPORT
  17. ENDIMPORT
  18. ENDTYPE
  19. ENDVAR
  20. CONST
  21. ENDCONST
  22. ARRAY
  23. RECORD
  24. ENDRECORD
  25. BEGIN
  26. ENDIF
  27. WHILE
  28. ENDWHILE
  29. ENDDO
  30. FORALL
  31. ENDFOR
  32. ENDFORALL
  33. PARALLEL
  34. REPEAT
  35. UNTIL
  36. PROCEDURE
  37. ENDPROCEDURE
  38. FUNCTION
  39. ENDFUNCTION
  40. RETURNS
  41. INOUTP
  42. PRIVATE
  43. END_OF_FILE
  44. nawk '
  45. BEGIN           { code=0 ; quoting=0 ; inside_comm=0 
  46.                   while ((getline kw < "'"$KEYGEN"'") >0)
  47.                     keywords[kw]++
  48.                 }
  49. /^@begin code/  { 
  50.    printf "@literal \\begin{code}{%s}\\let\\maybehbox=\\hbox\n", substr($0, 13)
  51.    code=1; next
  52. /^@end code/    { code=0 ; printf "@literal \\end{code}\n"; next}
  53. /^@quote$/      { quoting = 1 }
  54. /^@endquote$/   { quoting = 0 }
  55. /^@text /       { if (code) { print_code(substr($0, 7)) }
  56.                   else      { print }
  57.                   next
  58.                 }
  59. {print}
  60. function print_code(line) {
  61.         temp = line; 
  62.         comm = "";
  63.         if (temp ~ /\/\*/) 
  64.        { r = index(temp, "/*"); 
  65.              inside_comm = 1; comm = "\\COMMENT{" substr(temp, r+3);
  66.              if (comm ~ /\*\//) { inside_comm = 0; comm = comm "}"; temp = ""; }
  67.            }
  68.         if (temp ~ /\*\//)
  69.            { comm = temp "}"; temp = ""; inside_comm = 0; }
  70.         sub(/\*\//,"",comm);
  71.         sub(/\/\*.*/,"",temp);
  72.         if (temp != "" && inside_comm == 0)
  73.          temp = operators(temp);
  74.          temp = substitute_keywords(temp);
  75.          temp = mark_vars_types(temp);
  76.         }
  77.         line = temp comm;
  78.         print "@literal " line;
  79. function substitute_keywords(s, kw) {
  80.   for (kw in keywords)
  81.     if (s ~ kw)
  82.      {
  83.     gsub("(^|[ \\t]+)" kw "($|[ \\t]+)", " \\" kw " ", s);   
  84.         gsub("(^|[ \\t]+)" kw ";", " \\" kw ";", s);   
  85.         gsub("(^|[ \\t]+)" kw "\\.", " \\" kw ".", s);   
  86.         gsub("[(]" kw, "(\\" kw, s);
  87.     gsub("," kw, ",\\" kw, s);
  88.      }
  89.   return s
  90. function mark_vars_types(s  ) {
  91.      gsub(/\\OF[ \t\n]*[a-zA-Z_]+/,"|&|", s);
  92.      gsub(/\\RETURN[ \t\n]*[a-zA-Z_]+/,"|&|", s);
  93.      gsub(/[a-zA-Z_]+[ \t\n]*=[ \t\n](\\RECORD|\\ARRAY)/,"|&|", s);
  94.      gsub(/[a-zA-Z_]+[ \t\n]*=[ \t\n]\\{/,"|&|",s);
  95.      gsub(/:[\t\n ]*[a-zA-Z_]+/, "|&|" ,s);
  96.      gsub(/[a-zA-Z_]+[ \\t\\n]*\(/,"|&|",s);
  97.      gsub(/\(\|/, "|(", s);
  98.      gsub(/\|:[ \t\n]*/, ":|", s);
  99.      gsub(/\|\\de[ \t\n]*/, "\\de |", s);
  100.      gsub(/\|\\RETURN[ \t\n]*/, "\\RETURN |", s);
  101.      gsub(/\=[\t\n ]*\\ARRAY\|/, "| = \\ARRAY", s);
  102.      gsub(/\=[\t\n ]*\\RECORD\|/, "| = \\RECORD", s);
  103.      gsub(/\=[\t\n ]*\\{\|/, "| = \\{", s);
  104.      return s
  105. function operators(s ) {
  106.      gsub(/ >= /," \\ge ", s);
  107.      gsub(/ <= /, " \\le ", s);
  108.      gsub(/ != /, " \\not= ", s);
  109.      return s;
  110. rm -f $KEYGEN
  111.